home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
qtawk
/
ssfuncs.exp
< prev
next >
Wrap
Text File
|
1990-04-29
|
14KB
|
638 lines
# QTawk Trade Studies scoring function utility
# Standard scoring functions for Trade Studies
# 12 standard scoring functions
#
# Scoring function #1
# ┌
# │ 0 , V <= A
# │
# │ 1
# ssf1 = │ ─────────────────────────────, V > A
# │ ┌ ┐2S(B+V-2A) B > A
# │ │ B - A │ S > 0
# │ 1 + │───────│ f(B) = 0.5
# └ └ V - A ┘
#
# Scoring function #2
# ┌
# │ 1 , V >= C
# │
# │ 1
# ssf2 = │ ─────────────────────────────, V < C
# │ ┌ ┐2S(B+V-2C) B < C
# │ │ C - B │ S > 0
# │ 1 + │───────│ f(B) = 0.5
# └ └ C - V ┘
#
# Scoring function #3
# ┌
# │ 0 , V <= A
# │
# │ 1
# │ ─────────────────────────────, A < V < B
# │ ┌ ┐2S(B+V-2A) S > 0
# │ │ B - A │
# │ 1 + │───────│
# ssf3 = │ └ V - A ┘
# │ f(B) = 0.5
# │ 1
# │ ─────────────────────────────, B < V < C
# │ ┌ ┐2S(B+V-2C) B < C
# │ │ C - B │ S > 0
# │ 1 + │───────│
# │ └ C - V ┘
# │
# │ 1 , V >= C
# └
#
# Scoring function #4
# ┌
# │ 1
# │ ─────────────────────────────, V <= B
# │ ┌ ┐2S(B+V-2A) S > 0
# │ │ B - A │
# │ 1 + │───────│
# ssf4 = │ └ V - A ┘
# │ f(B) = 0.5
# │ 1
# │ ─────────────────────────────, V > 0
# │ ┌ ┐2S(B+V-2C) S > 0
# │ │ C - B │
# │ 1 + │───────│
# │ └ C - V ┘
# └
#
# Scoring function #5
# ┌
# │ 0 , V <= A1
# │
# │ 1 A1 < V < B1
# │ ─────────────────────────────── S1 > 0
# │ ┌ ┐2S1(B1+V-2A1)
# │ │ B1 - A1 │
# │ │ ────────│ f(B1) = 0.5
# │ └ V - A1 ┘
# │
# │ 1 B1 < V < C
# │ ─────────────────────────────── S1 > 0
# │ ┌ ┐2S1(B1+V-2C)
# │ │ C - B1│
# │ │ ──────│
# │ └ C - V ┘
# │
# ssf5 = │ 1 , V = C
# │
# │ 1 C < V < B2
# │ ─────────────────────────────── S2 < 0
# │ ┌ ┐2S2(B2+V-2C)
# │ │ B2 - C │
# │ │ ───────│
# │ └ V - C ┘ f(B2) = 0.5
# │
# │ 1 B2 < V < A2
# │ ─────────────────────────────── S2 < 0
# │ ┌ ┐2S2(B2+V-2A2)
# │ │ A2 - B2│
# │ │ ───────│
# │ └ A2 - V ┘
# │
# │ 0 , V = A2
# └
#
# Scoring function #6
# ┌
# │ 1 V <= B1
# │ ─────────────────────────────── S1 > 0
# │ ┌ ┐2S1(B1+V-2A1)
# │ │ B1 - A1 │
# │ │ ────────│ f(B1) = 0.5
# │ └ V - A1 ┘
# │
# │ 1 B1 < V < C
# │ ─────────────────────────────── S1 > 0
# │ ┌ ┐2S1(B1+V-2C)
# │ │ C - B1│
# │ │ ──────│
# │ └ C - V ┘
# │
# ssf6 = │ 1 , V = C
# │
# │ 1 C < V < B2
# │ ─────────────────────────────── S2 < 0
# │ ┌ ┐2S2(B2+V-2C)
# │ │ B2 - C │
# │ │ ───────│
# │ └ V - C ┘ f(B2) = 0.5
# │
# │ 1 B2 < V
# │ ─────────────────────────────── S2 < 0
# │ ┌ ┐2S2(B2+V-2A2)
# │ │ A2 - B2│
# │ │ ───────│
# │ └ A2 - V ┘
# └
#
# Scoring function #7
# ┌
# │ 1 , V <= A
# │
# │ 1
# ssf7 = │ ─────────────────────────────, V > A
# │ ┌ ┐2S(B+V-2A) B > A
# │ │ B - A │ S < 0
# │ 1 + │───────│ f(B) = 0.5
# │ └ V - A ┘
# └
#
# Scoring function #8
# ┌
# │ 1
# │ ─────────────────────────────, V < C
# │ ┌ ┐2S(B+V-2C) B < C
# ssf8 = │ │ C - B │ S > 0
# │ 1 + │───────│ f(B) = 0.5
# │ └ C - V ┘
# │
# │ 1 , V >= C
# └
#
# Scoring function #9
# ┌
# │ 1 , V <= A
# │
# │ 1
# │ ─────────────────────────────, A < V <= B
# │ ┌ ┐2S(B+V-2A) S < 0
# │ │ B - A │
# │ 1 + │───────│
# │ └ V - A ┘
# ssf9 = │ f(B) = 0.5
# │
# │ 1
# │ ─────────────────────────────, B < V < C
# │ ┌ ┐2S(B+V-2C) S > 0
# │ │ C - B │
# │ 1 + │───────│
# │ └ C - V ┘
# │
# │ 0 , V >= C
# └
#
# Scoring function #10
# ┌
# │ 1
# │ ─────────────────────────────, V <= B
# │ ┌ ┐2S(B+V-2A) S < 0
# │ │ B - A │
# │ 1 + │───────│
# │ └ V - A ┘
# ssf10 = │ f(B) = 0.5
# │
# │ 1
# │ ─────────────────────────────, V > B
# │ ┌ ┐2S(B+V-2C) S > 0
# │ │ C - B │
# │ 1 + │───────│
# │ └ C - V ┘
# └
#
# Scoring function #11
# ┌
# │ 1 , V <= A1
# │
# │ 1
# │ ─────────────────────────────── A1 < V <= B1
# │ ┌ ┐2S1(B1+V-2A1) S1 < 0
# │ │ B1 - A1 │
# │ │ ────────│
# │ └ V - A1 ┘ f(B1) = 0.5
# │
# │ 1
# │ ─────────────────────────────── B1 < V < C
# │ ┌ ┐2S1(B1+V-2C) S1 < 0
# │ │ C - B1│
# │ │ ──────│
# │ └ C - V ┘
# │
# ssf11 = │ 0 , V = C
# │
# │ 1
# │ ─────────────────────────────── C < V <= B2
# │ ┌ ┐2S2(B2+V-2C) S2 > 0
# │ │ B2 - C │
# │ │ ───────│
# │ └ V - C ┘ f(B2) = 0.5
# │
# │ 1
# │ ─────────────────────────────── B2 < V < A2
# │ ┌ ┐2S2(B2+V-2A2) S2 > 0
# │ │ A2 - B2│
# │ │ ───────│
# │ └ A2 - V ┘
# │ 1 , V >= A2
# └
#
# Scoring function #12
# ┌
# │ 1
# │ ─────────────────────────────── V <= B1
# │ ┌ ┐2S1(B1+V-2A1) S1 < 0
# │ │ B1 - A1 │
# │ │ ────────│
# │ └ V - A1 ┘ f(B1) = 0.5
# │
# │ 1
# │ ─────────────────────────────── B1 < V < C
# │ ┌ ┐2S1(B1+V-2C) S1 < 0
# │ │ C - B1│
# │ │ ──────│
# │ └ C - V ┘
# │
# ssf12 = │ 0 , V = C
# │
# │ 1
# │ ─────────────────────────────── C < V <= B2
# │ ┌ ┐2S2(B2+V-2C) S2 > 0
# │ │ B2 - C │
# │ │ ───────│
# │ └ V - C ┘ f(B2) = 0.5
# │
# │ 1
# │ ─────────────────────────────── B2 < V
# │ ┌ ┐2S2(B2+V-2A2) S2 > 0
# │ │ A2 - B2│
# │ │ ───────│
# │ └ A2 - V ┘
# └
#
#
BEGIN {
stderr = "stderr";
}
function std_scr_f(fnum,A1,A2,B1,B2,C,V,S1,S2) {
local ssf;
switch ( fnum ) {
case 1:
ssf = ssf1(A1,B1,C,V,S1);
break;
case 2:
ssf = ssf2(A1,B1,C,V,S1);
break;
case 3:
ssf = ssf3(A1,B1,C,V,S1);
break;
case 4:
ssf = ssf4(A1,B1,C,V,S1);
break;
case 5:
ssf = ssf5(A1,A2,B1,B2,C,V,S1,S2);
break;
case 6:
ssf = ssf6(A1,A2,B1,B2,C,V,S1,S2);
break;
case 7:
ssf = ssf7(A1,B1,C,V,S1);
break;
case 8:
ssf = ssf8(A1,B1,C,V,S1);
break;
case 9:
ssf = ssf9(A1,B1,C,V,S1);
break;
case 10:
ssf = ssf10(A1,B1,C,V,S1);
break;
case 11:
ssf = ssf11(A1,A2,B1,B2,C,V,S1,S2);
break;
case 12:
ssf = ssf12(A1,A2,B1,B2,C,V,S1,S2);
break;
default:
fprintf(stderr,"Improper Standard Scoring Function Number.\n");exit 100;
break;
}
return ssf;
}
function ssf1(A,B,C,V,S) {
local ssf;
if ( V <= A ) ssf = 0;
else ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
return ssf;
}
function ssf2(A,B,C,V,S) {
local ssf;
if ( V >= C ) ssf = 1;
else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
return ssf;
}
function ssf3(A,B,C,V,S) {
local ssf;
if ( V <= A ) ssf = 0;
else if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
else if ( V < C ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
else ssf = 1;
return ssf;
}
function ssf4(A,B,C,V,S) {
local ssf;
if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
return ssf;
}
function ssf5(A1,A2,B1,B2,C,V,S1,S2) {
local ssf;
if ( V <= A1 ) ssf =0;
else if ( V < B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
else if ( V == C) ssf = 1;
else if ( V < B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
else if ( V < A2 ) ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
else ssf = 0;
return ssf;
}
function ssf6(A1,A2,B1,B2,V,C,S1,S2) {
local ssf;
if ( V <= B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
else if ( V == C ) ssf = 0;
else if ( V < B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
else ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
return ssf;
}
function ssf7(A,B,V,C,S) {
local ssf;
if ( V <= A ) ssf = 0;
else ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
return ssf;
}
function ssf8(A,B,C,V,S) {
local ssf;
if ( V <= A ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
else ssf = 0;
return ssf;
}
function ssf9(A,B,C,V,S) {
local ssf;
if ( V <= A ) ssf = 0;
else if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
else if ( V < C ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
else ssf = 0;
return ssf;
}
function ssf10(A,B,C,V,S) {
local ssf;
if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
return ssf;
}
function ssf11(A1,A2,B1,B2,C,V,S1,S2) {
local ssf;
if ( V <= A1 ) ssf = 1;
else if ( V <= B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
else if ( V == C ) ssf = 0;
else if ( V <= B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
else if ( V < A2 ) ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
else ssf = 1;
return ssf;
}
function ssf12(A1,A2,B1,B2,C,V,S1,S2) {
local ssf;
if ( V <= B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
else if ( V == C ) ssf = 0;
else if ( V <= B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
else ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
return ssf;
}
function ssf_prime(fnum,A1,A2,B1,B2,C,V,S1,S2) {
local ssfp = TRUE;
local k1, k2, k3, k4;
local i1, i2;
local ssf = std_scr_f(fnum,A1,A2,B1,B2,C,V,S1,S2);
switch ( fnum ) {
case 1:
if ( V <= A1 ) ssfp = 0;
else {
k1 = B1 - A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
}
break;
case 2:
if ( V >= C ) ssfp = 0;
else {
k1 = B1 - C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
}
break;
case 3:
if ( V <= A1 ) ssfp = 0;
else if ( V <= B1 ) {
k1 = B1-A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
} else if ( V < C ) {
k1 = B1-C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
} else ssfp = 0;
break;
case 4:
if ( V <= B1 ) {
k1 = B1-A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
} else {
k1 = B1-C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B;
}
break;
case 5:
if ( V <= A1 ) ssfp = 0;
else if ( V <= B1 ) {
k1 = B1-A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
} else if ( V < C ) {
k1 = B1-C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
} else if ( V == C ) ssfp = 0;
else if ( V <= B2 ) {
k1 = B2-C;
k2 = A2;
k3 = -2*S2;
k4 = 4*S2*C-2*S2*B2;
} else if ( V < A2 ) {
k1 = B2-A2;
k2 = A2;
k3 = -2*S2;
k4 = 4*S2*A2-2*S2*B2;
} else ssfp = 0;
break;
case 6:
if ( V <= B1 ) {
k1 = B1-A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
} else if ( V < C ) {
k1 = B1-C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
} else if ( V == C ) ssfp = 0;
else if ( V <= B2 ) {
k1 = B2-C;
k2 = C;
k3 = -2*S2;
k4 = 4*S2*C-2*S2*B2;
} else {
k1 = B2-A2;
k2 = A2;
k3 = -2*S2;
k4 = 4*S2*A2-2*S2*B2;
}
break;
case 7:
if ( V <= A1 ) ssfp = 0;
else {
k1 = B1 - A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
}
break;
case 8:
if ( V < C ) {
k1 = B1 - C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
} else ssfp = 0;
break;
case 9:
if ( V <= A1 ) ssfp = 0;
else if ( V <= B1 ) {
k1 = B1 - A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
} else {
k1 = B1 - C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
}
break;
case 10:
if ( V <= B1 ) {
k1 = B1 - A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
} else {
k1 = B1 - C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
}
break;
case 11:
if ( V <= A1 ) ssfp = 0;
else if ( V <= B1 ) {
k1 = B1 - A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
} else if ( V < C ) {
k1 = B1 - C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
} else if ( V == C ) ssfp = 0;
else if ( V <= B2 ) {
k1 = B2 - C;
k2 = C;
k3 = -2*S2;
k4 = 4*S2*C-2*S2*B2;
} else if ( V < A2 ) {
k1 = B2 - A2;
k2 = A2;
k3 = -2*S2;
k4 = 4*S2*A2-2*S2*B2;
} else ssfp = 0;
break;
case 12:
if ( V <= B1 ) {
k1 = B1 - A1;
k2 = A1;
k3 = -2*S1;
k4 = 4*S1*A1-2*S1*B1;
} else if ( V < C ) {
k1 = B1 - C;
k2 = C;
k3 = -2*S1;
k4 = 4*S1*C-2*S1*B1;
} else if ( V == C ) ssfp = 0;
else if ( V <= B2 ) {
k1 = B2 - C;
k2 = C;
k3 = -2*S2;
k4 = 4*S2*C-2*S2*B2;
} else if ( V < A2 ) {
k1 = B2 - A2;
k2 = A2;
k3 = -2*S2;
k4 = 4*S2*A2-2*S2*B2;
} else ssfp = 0;
break;
}
if ( ssfp ) {
i1 = k3*V+k4;
i2 = (1/ssf)-1;
ssfp = -ssf*ssf*(i1/k1)*i2^(1-1/i1)+k3*(log(i2)^(1/i1)+i2);
}
return ssfp;
}